package org.sql.commands.mysql.filter;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : java connector sql 
// Archivo : Conditions.java
// Descripcion : Clase Conditions
// *************************************************************************/
// Version : 2.10.4
// Fecha de Creación: 26 de Septiembre de 2014
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.util.ArrayList;
import org.sql.commands.Filter;
import org.sql.commands.exception.DMLException;

public class Conditions implements Filter {

    // Atributos de la clase Conditions
    
    private ArrayList<Condition> conditions;
    private String connector;

    // Constructor de la clase Conditions
    
    public Conditions() {
        conditions = new ArrayList();
    }

    // Metodos de la clase Conditions
    
    /**
     *
     * @param conditions
     */
    public void setConditions(ArrayList<Condition> conditions) {
        this.conditions = conditions;
    }

    /**
     *
     * @param condition
     */
    public void addCondition(Condition condition) {
        conditions.add(condition);
    }

    /**
     * Este método nos permite establecer el conector de la Condición.
     * 
     * @param connector Conector de la Condición
     */
    public void setConnector(String connector) {
        this.connector = connector;
    }

    // Metodos estáticos de la clase Conditions
    
    /**
     *
     * @param condition
     * @return
     */
    public static Conditions creatorFilter(Condition condition) {
        Conditions conditions = new Conditions();
        conditions.addCondition(condition);

        return conditions; // Retornando Objeto CONDITIONS
    }

    /**
     *
     * @param conditions
     * @return
     */
    public static Conditions creatorFilter(ArrayList<Condition> conditions) {
        Conditions conditionsFilter = new Conditions();
        conditionsFilter.setConditions(conditions);

        return conditionsFilter; // Retornando Objeto CONDITIONS
    }

    // Metodos sobreescritos de la clase Conditions
    
    @Override
    public String getFilter() throws DMLException {
        if ((conditions == null) || (conditions.isEmpty())) {
            throw new DMLException(DMLException.CONDITIONS_UNDEFINED);
        } // No ha establecido el Condiciones del Filtro

        String cadenaConditions = ""; // Declarando dato para Proceso

        for (int index = 0; index < conditions.size(); index++) {
            // Selecciando Filtro de la Lista
            Condition condition = conditions.get(index);

            if (index != 0) {
                cadenaConditions += " " + condition.getConnector();
                cadenaConditions += " " + condition.getFilter();
            } // No es la Primera condición del Array
            else {
                cadenaConditions += condition.getFilter();
            } // Es la Primera condición del Array
        } // Recorriendo el Array de Condiciones del Conditions

        return "(" + cadenaConditions + ")"; // Retornando Objeto CONDITIONS
    }

    @Override
    public String getConnector() {
        return connector;
    }
}